package LimitedTimeGame.Day_0216;

/**
 * @author zxc
 * @date 2023/02/16 10:30
 **/
/**
 * 题目 ：按照符号重排数组
 * 题目详述 ：
 * 给你一个下标从 0 开始的整数数组 nums ，数组长度为 偶数 ，由数目相等的正整数和负整数组成。
 * 你需要 重排 nums 中的元素，使修改后的数组满足下述条件：
 * 任意连续 的两个整数 符号相反
 * 对于符号相同的所有整数，保留 它们在 nums 中的 顺序 。
 * 重排后数组以正整数开头。
 * 重排元素满足上述条件后，返回修改后的数组。
 *
 * 提示：
 * 2 <= nums.length <= 2 * 105
 * nums.length 是 偶数
 * 1 <= |nums[i]| <= 105
 * nums 由 相等 数量的正整数和负整数组成
 *
 */
public class RearrangeArray {
    /**
     * 思路 ：
     * 即，使用辅助数组，来分别存储 有顺序的正整数集合 && 有顺序的负整数集合;
     * @param nums
     * @return
     */
    public int[] rearrangeArray(int[] nums) {
        int len = nums.length;
        int[] positiveInteger = new int[len / 2];
        int[] negativeInteger = new int[len / 2];
        int p1 = 0;
        int p2 = 0;
        for (int num : nums) {
            if(num > 0){
                positiveInteger[p1++] = num;
            }
            else {
                negativeInteger[p2++] = num;
            }
        }
        // 指针p1和p2置零;
        p1 = 1;
        p2 = 0;
        nums[0] = positiveInteger[0];
        for(int i = 1; i < len ;i++){
            nums[i] = (i % 2 == 0) ? positiveInteger[p1++] : negativeInteger[p2++];
        }
        return nums;
    }
}
